<template>
  <div class="goods">
    <div class="wrap">
      <Crumb :nav="nav"></Crumb>
      <img src="../assets/images/banner.4c6b6225.png" width="100%" alt="" />
      <ul class="options">
        <li>
          <strong>排序：</strong>
          <span :class="options1Index == index ? 'active' : ''" v-for="(item, index) in options1" :key="index" @click="options1Fn(item.min, item.max, index)">{{ item.txt }}</span>
        </li>
        <li>
          <strong>分类：</strong>
          <span :class="options2Index == index ? 'active' : ''" v-for="(item, index) in options2" :key="index" @click="options2Fn(item.type, index)">{{ item.txt }}</span>
        </li>
      </ul>
      <List :arr="goodsListFy" v-show="goodsListFy.length" />
      <div v-show="!goodsList.length">未找到对应商品</div>
      <!-- <p style="text-align: center">{{ isReachBottom ? '加载完毕' : '加载中...' }}</p> -->
      <!-- 分页器 -->
      <Pagination :pageNo="page" :pageSize="limit" :total="goodsList.length" :continues="5" @getPageNo="getPageNo" v-show="goodsListFy.length"> </Pagination>
      <!-- <Loading :isReachBottom="isReachBottom"></Loading> -->
    </div>
  </div>
</template>

<script>
import Crumb from '../components/Crumb.vue'
import List from '../components/home/List.vue'
import Loading from '@/components/Loading.vue'
import Pagination from '@/components/Pagination.vue'
import { GoodsSearchAPI } from '@/request/api'
import { getScrollTop, getClientHeight, getScrollHeight } from '@/utils'
export default {
  data() {
    return {
      // 面包屑导航数据
      nav: [
        { name: '首页', link: '#' },
        { name: '全部商品', link: '#' }
      ],
      // 全部商品
      goodsList: [],
      // 用于根据页码显示的商品数组
      goodsListShow: [],
      // 栏目 1->精品推荐 2-> 热门兑换 0->全部
      did: 0,
      // 类型 1->实体商品 2->虚拟商品 0->全部
      type: 0,
      // 积分最小值 最少是0
      min: 0,
      // 积分最大值 最多是10000，传入0，会直接返回所有商品
      max: 0,
      // 商品关键词
      keyword: '',
      // 排列导航列表
      options1: [
        { min: 0, max: 0, txt: '全部' },
        // "我还可以兑换"的max值是Header组件的coin值
        { min: 0, max: 0, txt: '我还可以兑换' },
        { min: 0, max: 500, txt: '0-500分' },
        { min: 500, max: 1000, txt: '500-1000分' },
        { min: 1000, max: 1500, txt: '1000-1500分' },
        { min: 1500, max: 2500, txt: '1500-2500分' },
        { min: 2500, max: 6500, txt: '2500-6500分' },
        { min: 6500, max: 10000, txt: '6500-10000分' }
      ],
      // 排列导航高亮索引
      options1Index: 0,
      // 分类导航列表
      options2: [
        { type: 0, txt: '全部' },
        { type: 1, txt: '实体商品' },
        { type: 2, txt: '虚拟商品' }
      ],
      // 分类导航高亮索引
      options2Index: 0,
      // 当前显示的页码
      page: 1,
      // 每一页显示多少条数据
      size: 8,
      // 是否处于加载数据中
      isLoading: true,
      // 是否到达底部
      isReachBottom: true,

      // 初始化参数
      // 当前第几页
      // page: 1,
      // 每一页展示数据个数
      limit: 8,
      myOrder: {},
      // 分页商品数组
      goodsListFy: []
    }
  },
  components: {
    Crumb,
    List,
    Loading,
    Pagination
  },
  created() {
    // 接收地址栏中参数keyword
    this.keyword = this.$route.query.keyword
    this.goodsSearch()
  },
  mounted() {
    // console.log('mounted-挂载完成')
    // window.addEventListener('scroll', this.scrollFn)
  },
  beforeDestroy() {
    // console.log('beforeDestroy-销毁之前')
    // window.removeEventListener('scroll', this.scrollFn)
  },
  methods: {
    async goodsSearch() {
      let res = await GoodsSearchAPI({
        did: this.did,
        type: this.type,
        min: this.min,
        max: this.max,
        keyword: this.keyword
      })
      // console.log(res)
      this.goodsList = res.data
      // 默认只显示第一页8条数据
      this.goodsListShow = this.goodsList.filter((item, index) => index < this.size)
      this.goodsListFy = this.goodsList.filter((item, index) => index < this.limit)
      // 初始化变量
      this.isReachBottom = false
      this.page = 1
    },
    options1Fn(min, max, i) {
      if (this.options1Index == i) return
      // console.log(min, max, i)
      // 1. 实现高亮切换
      this.options1Index = i
      // 2. 实现查询 (根据min,max)重新查询
      this.min = min
      this.max = max
      this.goodsSearch()
    },
    options2Fn(type, i) {
      if (this.options2Index == i) return
      // 1. 实现高亮切换
      this.options2Index = i
      // 2. 实现查询 (根据type)重新查询
      this.type = type
      this.goodsSearch()
    },
    scrollFn() {
      // console.log('滚动了', getScrollTop(), getClientHeight(), getScrollHeight())
      // 当窗口高度 + 滚动条距离 大于 文档高度 - 底部高度
      if (getScrollTop() + getClientHeight() > getScrollHeight() - 240) {
        // 判断数据是否到达底部（加载完毕）
        if (this.goodsListShow.length == this.goodsList.length) {
          // 设置已经到达底部了
          this.isReachBottom = true
          return
        }
        // console.log('可以加载下一页了')
        if (this.isLoading) {
          this.isLoading = false
          // 从goodsList(28)中获取下一页内容到goodsListShow中
          // 第一页 page:1 size:8 对应下标 0~7
          // 第二页 page:2 size:8 对应下标 8~15
          // 第三页 page:3 size:8 对应下标 16~23
          this.page++
          // 使用setTimeout模拟异步场景
          setTimeout(() => {
            // 第二页从下标8开始逐个逐个添加数据到goodsListShow
            for (let i = this.size * (this.page - 1); i < this.page * this.size; i++) {
              // console.log('page:', this.page, 'i:', i, this.goodsList[i])
              //this.goodsList[i]必须有这个值，才能push到展示的数组里面去
              // this.goodsList[i] ? this.goodsListShow.push(this.goodsList[i]) : ''
              // 短路运算
              this.goodsList[i] && this.goodsListShow.push(this.goodsList[i])
            }
            // 完成后，相当加载数据完毕
            this.isLoading = true
          }, 2000)
        }
      }
    },
    // 获取当前点击那一页
    getPageNo(page) {
      // 修改组件响应式数据 page
      this.page = page
      console.log(page)
      this.goodsListFy = this.goodsList.filter((item, index) => index >= this.limit * (page - 1) && index < this.limit * page)
    }
  },
  watch: {
    '$route.query.keyword': {
      handler(newVal, oldVal) {
        this.keyword = newVal
        this.goodsSearch()
      }
    }
  }
}
</script>

<style lang="less" scoped>
@import '../assets/css/public.less';

.goods {
  padding-bottom: 50px;
  background: #efefef;
  padding-top: 20px;
  .options {
    padding-top: 20px;
    padding-bottom: 40px;
    li {
      margin-top: 20px;
      strong {
        color: #000;
        font-weight: bold;
      }
      span {
        margin-right: 20px;
        margin-left: 10px;
        cursor: pointer;
        color: #999;
        &.active {
          color: @base-color;
          font-weight: bold;
        }
      }
    }
  }
}
// 分页
.choose-order {
  .pagination {
    margin: 38px 0;

    ul {
      font-size: 0;
      display: inline-block;

      li {
        display: inline-block;
        padding: 4px 9px;
        font-size: 14px;
        border: 1px solid #e0e9ee;

        &.prev,
        &.next {
          background-color: #fafafa;
        }

        &.prev {
          border-right-color: #28a3ef;
        }

        &.page {
          border-color: #28a3ef;
          border-left: 0;

          &.actived {
            background-color: #28a3ef;

            a {
              color: #fff;
            }
          }
        }
      }
    }

    div {
      display: inline-block;
      font-size: 14px;
      color: #333;
    }
  }
}
</style>
